package com.tulele.vtool.service.impl;

import com.tulele.vtool.mapper.ArticleHeadTailTemplateInfoMapper;
import com.tulele.vtool.model.ArticleHeadTailTemplateInfo;
import com.tulele.vtool.model.reqEntity.PlugInArticleHtAdInfoReqBean;
import com.tulele.vtool.service.IArticleHeadTailTemplateInfoService;
import com.tulele.vtool.utils.DateUtil;
import com.tulele.vtool.utils.RedisCacheUtil;
import com.tulele.vtool.utils.SysConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class ArticleHeadTailTemplateInfoServiceImpl implements IArticleHeadTailTemplateInfoService {

    @Autowired
    private ArticleHeadTailTemplateInfoMapper articleHeadTailTemplateInfoMapper;

    @Autowired
    private RedisCacheUtil redisCacheUtil;

    @Override
    public List<ArticleHeadTailTemplateInfo> getUserHtTemplateInfo(Integer userId) {
        return articleHeadTailTemplateInfoMapper.queryUserHtTemplateInfo(userId);
    }

    @Override
    public int handleUserHtTemplateInfo(Integer userId, PlugInArticleHtAdInfoReqBean plugInArticleHtAdInfoReqBean) {

        //如果是应用于全局的，则直接添加为模板，同时将之前的全局的相关记录设置为非全局模板
        int applyToAllArticleStatus = Optional.ofNullable(plugInArticleHtAdInfoReqBean.getApplyToAllArticleStatus()).orElse(0);

        if (applyToAllArticleStatus == 1) {

            articleHeadTailTemplateInfoMapper.updUserHtTemplateInfo(0, plugInArticleHtAdInfoReqBean.getHtTemplatePosition(), userId);

            //查询该位置的模板是否已经存在，不存在则直接添加，存在则修改
            ArticleHeadTailTemplateInfo articleHeadTailTemplateInfoInDB = articleHeadTailTemplateInfoMapper.queryUserHtTemplateInfoByTemplateContent(userId, plugInArticleHtAdInfoReqBean.getHtTemplateContent(),plugInArticleHtAdInfoReqBean.getIllustrateUrl(), plugInArticleHtAdInfoReqBean.getHtTemplatePosition());

            if (articleHeadTailTemplateInfoInDB == null) {

                ArticleHeadTailTemplateInfo templateInfo = new ArticleHeadTailTemplateInfo();
                templateInfo.setUserId(userId);
                templateInfo.setHtTemplateEffectStatus(1);
                templateInfo.setHtTemplatePosition(plugInArticleHtAdInfoReqBean.getHtTemplatePosition());
                templateInfo.setHtTemplateStatus(1);
                templateInfo.setHtTemplateContent(plugInArticleHtAdInfoReqBean.getHtTemplateContent());
                templateInfo.setHtTemplatePicturePath(plugInArticleHtAdInfoReqBean.getIllustrateUrl());
                templateInfo.setCreateTime(DateUtil.getCurDate());

                articleHeadTailTemplateInfoMapper.addHtTemplateInfo(templateInfo);

            } else {

                ArticleHeadTailTemplateInfo templateInfo = new ArticleHeadTailTemplateInfo();
                templateInfo.setId(articleHeadTailTemplateInfoInDB.getId());
                templateInfo.setHtTemplateEffectStatus(1);
                templateInfo.setModifyTime(DateUtil.getCurDate());

                articleHeadTailTemplateInfoMapper.updateHtTemplateInfo(templateInfo);

            }


        } else {

            //如果不应用于全局的，但是选择存为模板，则进行保存，此时也查询该模板是否存在再进行处理

            int applyToHtTemplateStatus = Optional.ofNullable(plugInArticleHtAdInfoReqBean.getApplyToHtTemplateStatus()).orElse(0);

            if (applyToHtTemplateStatus == 1) {

                ArticleHeadTailTemplateInfo articleHeadTailTemplateInfoInDB = articleHeadTailTemplateInfoMapper.queryUserHtTemplateInfoByTemplateContent(userId, plugInArticleHtAdInfoReqBean.getHtTemplateContent(), plugInArticleHtAdInfoReqBean.getIllustrateUrl(), plugInArticleHtAdInfoReqBean.getHtTemplatePosition());

                if (articleHeadTailTemplateInfoInDB == null) {

                    ArticleHeadTailTemplateInfo templateInfo = new ArticleHeadTailTemplateInfo();
                    templateInfo.setUserId(userId);
                    templateInfo.setHtTemplateEffectStatus(0);
                    templateInfo.setHtTemplatePosition(plugInArticleHtAdInfoReqBean.getHtTemplatePosition());
                    templateInfo.setHtTemplateStatus(1);
                    templateInfo.setHtTemplateContent(plugInArticleHtAdInfoReqBean.getHtTemplateContent());
                    templateInfo.setHtTemplatePicturePath(plugInArticleHtAdInfoReqBean.getIllustrateUrl());
                    templateInfo.setCreateTime(DateUtil.getCurDate());

                    articleHeadTailTemplateInfoMapper.addHtTemplateInfo(templateInfo);

                }
            }

        }

        //如果模板的数目超过限制，则将最先添加的非全局的设置为已删除
        int templateCount = Optional.ofNullable(articleHeadTailTemplateInfoMapper.queryUserHtTmeplateCount(userId)).orElse(0);

        if (templateCount > SysConstant.HD_TEMPLATE_COUNT_LIMIT) {
            int hdTemplateId = Optional.ofNullable(articleHeadTailTemplateInfoMapper.queryUserLastValidHtTemplateInfo(userId)).orElse(0);
            if (hdTemplateId > 0) {
                articleHeadTailTemplateInfoMapper.updUserLastHtTemplateInfoStatus(userId, hdTemplateId);
            }
        }

        redisCacheUtil.removeSingleCache("userGlobalHtTemplateInfo" + userId);

        return 0;
    }

    @Override
    public List<ArticleHeadTailTemplateInfo> getUserGlobalHtTemplateInfo(Integer userId) {

        List<ArticleHeadTailTemplateInfo> userGlobalHtTemplateInfoList = null;

        Object userGlobalHtTemplateInfoListObj = redisCacheUtil.getCacheObject("userGlobalHtTemplateInfo" + userId);
        if (userGlobalHtTemplateInfoListObj == null) {

            userGlobalHtTemplateInfoList = articleHeadTailTemplateInfoMapper.queryUserGlobalHtTemplateInfo(userId);

            redisCacheUtil.setCacheObject("userGlobalHtTemplateInfo" + userId, userGlobalHtTemplateInfoList, 2592000);

        } else {

            userGlobalHtTemplateInfoList = (List<ArticleHeadTailTemplateInfo>)userGlobalHtTemplateInfoListObj;

        }

        return userGlobalHtTemplateInfoList;
    }

    @Override
    public int removeUserHtTemplateInfo(Integer userId, Integer htTemplateId) {

        ArticleHeadTailTemplateInfo articleHeadTailTemplateInfo = new ArticleHeadTailTemplateInfo();
        articleHeadTailTemplateInfo.setId(htTemplateId);
        articleHeadTailTemplateInfo.setHtTemplateStatus(0);
        articleHeadTailTemplateInfo.setModifyTime(DateUtil.getCurDate());

        articleHeadTailTemplateInfoMapper.updateHtTemplateInfo(articleHeadTailTemplateInfo);

        redisCacheUtil.removeSingleCache("userGlobalHtTemplateInfo" + userId);
        return 0;
    }

    @Override
    public Integer getUserHtTmeplateCount(Integer userId) {
        return articleHeadTailTemplateInfoMapper.queryUserHtTmeplateCount(userId);
    }
}
